"""
@name : 01.项目前提知识
@author : FanMY_71
@projectname: flask
@Time: 2022/8/15-10:22
"""

#1、web开发，用于写网站的。是基于http协议
#2、web服务器
#       nginx -- 静态服务器 -- 显示静态页面

#3、后端API开发，（前端--用户看到的界面（html css js）  后端--业务逻辑 -- flask）
#4、如何动态生成html？如何接受http请求？解析http请求，发送http响应
#    这些hcp连接，http原始请求和响应应该由专门的服务器软件实现，我们只需要关心业务逻辑
#    需要统一的接口规则，去让python应用的web服务器与python编写web业务之间做一个统一
# 这个接口我们就叫：WSGI   --  （Python Web Server Gateway Interface）
# 是python语言定义的web服务器和web应用程序或框架之间一种简单而通用的接口规范

# 专门的wsji服务器（python web服务器）  ——————gunicorn，uwsgi
# gunicorn  —— 配置简单
# uwsgi ————  配置复杂点

# flask   基于werkzeug（接口规范）和jinja(用来展示页面的开发的模板库

# web开发模式
# 1、mvc  设计模式(模型(model) :数据保存；视图(View)：用户界面展示；控制器(Controller)：业务逻辑处理)
#

# 2、前后端分离  若是不分离的话，前端的业务若是出错，会影响后端的业务运行
# 前后端分离主要是提高效率

# flask是python中常用web框架之一
# django

# flask   VS    django
# flask是轻量级(需要什么就装什么)；django重量级(有很多东西已经集成好，不管你需不需要)
# flask自由、灵活、扩展性强；django，不灵活，开发速度非常快
# flask适合web服务的api开发

# 项目的虚拟环境
# python自带venv模块创建虚拟环境
# $ python -m venv myvenv
# 创建之后，目前目录下就会生成myvenv
# 下面会有一个叫做Scripts的文件，里面是自己环境下运行脚本代码
"""

86189@LAPTOP-3VFTFIFS MINGW64 /f/Desktop/学习/项目
$ python -m venv myvenv
ls

86189@LAPTOP-3VFTFIFS MINGW64 /f/Desktop/学习/项目
$ ls
01.项目前提知识.py  main.py  myvenv/

86189@LAPTOP-3VFTFIFS MINGW64 /f/Desktop/学习/项目
$ cd myvenv/

86189@LAPTOP-3VFTFIFS MINGW64 /f/Desktop/学习/项目/myvenv
$ ls
Include/  Lib/  Scripts/  pyvenv.cfg

86189@LAPTOP-3VFTFIFS MINGW64 /f/Desktop/学习/项目/myvenv
$ cd Scripts/

86189@LAPTOP-3VFTFIFS MINGW64 /f/Desktop/学习/项目/myvenv/Scripts
$ ls
Activate.ps1  deactivate.bat         pip.exe*     python.exe*
activate      easy_install-3.9.exe*  pip3.9.exe*  pythonw.exe*
activate.bat  easy_install.exe*      pip3.exe*

86189@LAPTOP-3VFTFIFS MINGW64 /f/Desktop/学习/项目/myvenv/Scripts
$ source activate
(myvenv)    #  这表示自己已经进入到虚拟环境了
86189@LAPTOP-3VFTFIFS MINGW64 /f/Desktop/学习/项目/myvenv/Scripts
$ which pip
/f/Desktop/学习/项目/flask/myvenv/Scripts/\Desktop\学习\项目\myvenv/Scripts/pip     # 表示现在的pip时使用的虚拟环境的pip
(myvenv)
"""


########## api授权
# 如果别的程序需要调用你写的api
# 程序 --》程序


# HTTP 协议  -- 无状态
# 会话保持
# session（服务器）和cookie(保存在客户端)
# token 令牌验证   可以保存在cookie里面或者缓存中，
# token验证（令牌验证）
# 本质上就是一个hash值
# 客户端请求成功后，服务端会将一个仅服务端知道的密码字符串（最好不要固定）和其他内容（假设是盐值和timestamp）组合加密的密文sign发送给客户端
# 包含sign、盐值、timestamp
# 以后客户端请求时，就携带sign、盐值和timestamp向服务器发起请求
# 服务器用同样的方式，将客户端传来的信息进行加密，再与客户端传来的sign进行对比
# 和api授权原理相同
